home *** CD-ROM | disk | FTP | other *** search
- /*
- * FM_InfoReq_React.c
- *
- * Requester for info-request with reaction-support
- * $VER: V2.0, 13.10.2001
- * Coded by Edgar Schwan
- */
-
- #include <intuition/gadgetclass.h>
- #include <intuition/classusr.h>
- #include <intuition/screens.h>
- #include <classes/window.h>
- #include <dos/dos.h>
-
- #include <clib/intuition_protos.h>
- #include <clib/exec_protos.h>
- #include <clib/graphics_protos.h>
- #include <clib/alib_protos.h>
-
- #include <pragmas/intuition_pragmas.h>
- #include <pragmas/exec_pragmas.h>
- #include <pragmas/graphics_pragmas.h>
-
- #include <stdlib.h>
- #include <stdio.h>
-
- #include "FM_InfoReq_React.h"
- #include "FM_ReactionBasics.h"
- #include "FM_Reaction.h"
- #include "FM_ReactionCD.h"
-
- extern ULONG *PALETTE;
-
- struct ReactWinData *info_rwd = NULL;
- struct ReactWinData *workgroup_rwd = NULL;
-
- /* Do_InfoRequest(): info-requester (full handling).
-
- SYNOPSIS: void = Do_InfoRequest
- (
- struct Window *Win;
- char *PubScreenName;
- WORD Left;
- WORD Top;
- );
-
- INPUTS: Win:
- Pointer to the parent-window.
-
- PubScreenName:
- name of the public-screen, where the window should appear.
-
- Left:
- Left edge of palette-window (not supported yet).
-
- Top:
- Top edge of palette-window (not supported yet).
-
- RETURNS: -
- */
-
- void Do_InfoRequest(struct Window *Win, char *PubScreenName, WORD Left, WORD Top)
- {
- LONG result = RESULT_NOTHING;
- ULONG waitsigs, mask;
-
- if (OpenInfoReqWindow(PubScreenName) == TRUE) {
- waitsigs = info_rwd->RWD_WSignals|SIGBREAKF_CTRL_C;
-
- while(result == RESULT_NOTHING) {
- mask = Wait(waitsigs);
- #ifndef NDEBUG
- printf("mask: %lX\n", mask);
- #endif /*NDEBUG*/
- if (mask & info_rwd->RWD_WSignals) {
- result = HandleInfoReqWindow(Win, PubScreenName);
- }
- if (mask & SIGBREAKF_CTRL_C) {
- result = RESULT_CANCEL;
- }
- }
-
- CloseInfoReqWindow();
- } else DisplayError(Win, TXT_ERR_Window, 5L);
-
- LoadRGB32(ViewPortAddress (Win), (APTR) PALETTE);
- }
-
- /* OpenInfoReqWindow(): open window of info-requester.
-
- SYNOPSIS: BOOL res = OpenInfoReqWindow
- (
- char *PubScreenName;
- );
-
- INPUTS: PubScreenName:
- name of the public-screen, where the window should appear.
-
- RETURNS: res:
- TRUE, if successfull.
- */
-
- BOOL OpenInfoReqWindow(char *PubScreenName)
- {
- if (info_rwd = OpenReactionWindow(WIN_INFO_ID, GROUP_Info_ID, PubScreenName)) {
- return(TRUE);
- }
- return(FALSE);
- }
-
- /* CloseInfoReqWindow(): close window of info-requester.
-
- SYNOPSIS: void = CloseInfoReqWindow
- (
- void
- );
-
- INPUTS: -
-
- RETURNS: -
- */
-
- void CloseInfoReqWindow(void)
- {
- CloseReactionWindow(info_rwd);
- }
-
- /* HandleInfoReqWindow(): Handle the messages of the info-requester.
-
- SYNOPSIS: LONG res = HandlePalettePrefWindow
- (
- struct Window *Win;
- char *PubScreenName;
- );
-
- INPUTS: Win:
- Pointer to a window-structure.
-
- PubScreenName:
- name of the public-screen, where windows should appear.
-
- RETURNS: res:
- result of messages: RESULT_NOTHING -> nothing happens.
- RESULT_CANCEL -> user wants to quit without a change.
- RESULT_OK -> accept changes and quit.
- */
-
- LONG HandleInfoReqWindow(struct Window *Win, char *PubScreenName)
- {
- LONG rc = RESULT_NOTHING;
- ULONG result, code;
-
- while((result = DoMethod(info_rwd->RWD_WindowObject, WM_HANDLEINPUT, &code)) != WMHI_LASTMSG) {
-
- #ifndef NDEBUG
- printf("result: %ld\n", result);
- #endif /*NDEBUG*/
-
- switch (result & WMHI_CLASSMASK) {
- case WMHI_CLOSEWINDOW:
- rc = RESULT_CANCEL;
- break;
-
- case WMHI_GADGETUP:
- switch (result & RL_GADGETMASK) {
- case Info_BUTTON_OK:
- rc = RESULT_OK;
- break;
- case Info_BUTTON_More:
- SetAttrs(info_rwd->RWD_WindowObject, WA_BusyPointer, TRUE);
- Do_WorkgroupRequest(info_rwd->RWD_IWindow, PubScreenName, 50, 50);
- SetAttrs(info_rwd->RWD_WindowObject, WA_BusyPointer, FALSE);
- rc = RESULT_OK;
- break;
- #ifndef NDEBUG
- default:
- printf("unknown result: %lX\nunknown gadget: %lX\n", result, result & WMHI_GADGETMASK);
- DisplayBeep(NULL);
- break;
- #endif /*NDEBUG*/
- }
- break;
-
- case WMHI_ICONIFY:
- DoMethod(info_rwd->RWD_WindowObject, WM_ICONIFY);
- GetAttr(WINDOW_Window, info_rwd->RWD_WindowObject, (ULONG *) &info_rwd->RWD_IWindow);
- break;
-
- case WMHI_UNICONIFY:
- DoMethod(info_rwd->RWD_WindowObject, WM_OPEN);
- GetAttr(WINDOW_Window, info_rwd->RWD_WindowObject, (ULONG *) &info_rwd->RWD_IWindow);
- break;
- #ifndef NDEBUG
- default:
- printf("unknown result: %lX\nunknown class: %lX\n", result, result & WMHI_CLASSMASK);
- DisplayBeep(NULL);
- break;
- #endif /*NDEBUG*/
- }
- }
- return(rc);
- }
-
- /* Do_WorkgroupRequest(): workgroup-requester (full handling).
-
- SYNOPSIS: void = Do_WorkgroupRequest
- (
- struct Window *Win;
- char *PubScreenName;
- WORD Left;
- WORD Top;
- );
-
- INPUTS: Win:
- Pointer to the parent-window.
-
- PubScreenName:
- name of the public-screen, where the window should appear.
-
- Left:
- Left edge of palette-window.
-
- Top:
- Top edge of palette-window.
-
- RETURNS: -
- */
-
- void Do_WorkgroupRequest(struct Window *Win, char *PubScreenName, WORD Left, WORD Top)
- {
- LONG result = RESULT_NOTHING;
- ULONG waitsigs, mask;
-
- if (OpenWorkgroupReqWindow(PubScreenName) == TRUE) {
- waitsigs = workgroup_rwd->RWD_WSignals|SIGBREAKF_CTRL_C;
-
- while(result == RESULT_NOTHING) {
- mask = Wait(waitsigs);
- #ifndef NDEBUG
- printf("mask: %lX\n", mask);
- #endif /*NDEBUG*/
- if (mask & workgroup_rwd->RWD_WSignals) {
- result = HandleWorkgroupReqWindow(Win);
- }
- if (mask & SIGBREAKF_CTRL_C) {
- result = RESULT_CANCEL;
- }
- }
-
- CloseWorkgroupReqWindow();
- } else DisplayError(Win, TXT_ERR_Window, 5L);
- }
-
- /* OpenWorkgroupReqWindow(): open window of workgroup-requester.
-
- SYNOPSIS: BOOL res = OpenWorkgroupReqWindow
- (
- char *PubScreenName;
- );
-
- INPUTS: PubScreenName:
- name of the public-screen, where the window should appear.
-
- RETURNS: res:
- TRUE, if successfull.
- */
-
- BOOL OpenWorkgroupReqWindow(char *PubScreenName)
- {
- if (workgroup_rwd = OpenReactionWindow(WIN_WORK_ID, GROUP_Work_ID, PubScreenName)) {
- return(TRUE);
- }
- return(FALSE);
- }
-
- /* CloseWorkgroupReqWindow(): close window of workgroup-requester.
-
- SYNOPSIS: void = CloseWorkgroupReqWindow
- (
- void
- );
-
- INPUTS: -
-
- RETURNS: -
- */
-
- void CloseWorkgroupReqWindow(void)
- {
- CloseReactionWindow(workgroup_rwd);
- }
-
- /* HandleWorkgroupReqWindow(): Handle the messages of the workgroup-requester.
-
- SYNOPSIS: BOOL = HandleWorkgroupReqWindow
- (
- struct Window *Win;
- );
-
- INPUTS: Win:
- Pointer to a window-structure.
-
- RETURNS: res:
- result of messages: RESULT_NOTHING -> nothing happens.
- RESULT_CANCEL -> user wants to quit without a change.
- RESULT_OK -> accept changes and quit.
- */
-
- LONG HandleWorkgroupReqWindow(struct Window *Win)
- {
- LONG rc = RESULT_NOTHING;
- ULONG result, code;
-
- while((result = DoMethod(workgroup_rwd->RWD_WindowObject, WM_HANDLEINPUT, &code)) != WMHI_LASTMSG) {
-
- #ifndef NDEBUG
- printf("result: %ld\n", result);
- #endif /*NDEBUG*/
-
- switch (result & WMHI_CLASSMASK) {
- case WMHI_CLOSEWINDOW:
- rc = RESULT_CANCEL;
- break;
-
- case WMHI_GADGETUP:
- switch (result & RL_GADGETMASK) {
- case Work_BUTTON_OK:
- rc = RESULT_OK;
- break;
- #ifndef NDEBUG
- default:
- printf("unknown result: %lX\nunknown gadget: %lX\n", result, result & WMHI_GADGETMASK);
- DisplayBeep(NULL);
- break;
- #endif /*NDEBUG*/
- }
- break;
-
- case WMHI_ICONIFY:
- DoMethod(workgroup_rwd->RWD_WindowObject, WM_ICONIFY);
- GetAttr(WINDOW_Window, workgroup_rwd->RWD_WindowObject, (ULONG *) &workgroup_rwd->RWD_IWindow);
- break;
-
- case WMHI_UNICONIFY:
- DoMethod(workgroup_rwd->RWD_WindowObject, WM_OPEN);
- GetAttr(WINDOW_Window, workgroup_rwd->RWD_WindowObject, (ULONG *) &workgroup_rwd->RWD_IWindow);
- break;
- #ifndef NDEBUG
- default:
- printf("unknown result: %lX\nunknown class: %lX\n", result, result & WMHI_CLASSMASK);
- DisplayBeep(NULL);
- break;
- #endif /*NDEBUG*/
- }
- }
- return(rc);
- }
-